package com.Algorithm.HUAWEI.two20220303;

import jdk.internal.util.xml.impl.Input;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * Created with IntelliJ IDEA.
 *
 * @Author: zjz
 * @Date: 2022/03/16/9:11
 * @Description:
 * @Target:
 */
public class 字符串排序 {
    /*
    * 描述
        编写一个程序，将输入字符串中的字符按如下规则排序。

        规则 1 ：英文字母从 A 到 Z 排列，不区分大小写。

        如，输入： Type 输出： epTy

        规则 2 ：同一个英文字母的大小写同时存在时，按照输入顺序排列。

        如，输入： BabA 输出： aABb

        规则 3 ：非英文字母的其它字符保持原来的位置。


        如，输入： By?e 输出： Be?y

        数据范围：输入的字符串长度满足 1≤n≤1000

        输入描述：
        输入字符串
        输出描述：
        输出字符串
        示例1
        输入：
        A Famous Saying: Much Ado About Nothing (2012/8).
        复制
        输出：
        A aaAAbc dFgghh: iimM nNn oooos Sttuuuy (2012/8).

    * */



    // 改写冒泡


    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        String ss1 = in.readLine();

        char[] chars = ss1.toCharArray();

        int len = chars.length;
        for (int i = 0; i < ss1.length(); i++) {
            if ((!checkRange(ss1.charAt(i),'a','z')&&!checkRange(ss1.charAt(i),'A','Z'))){
                len++;
            }
        }


        for (int i = 0; i < chars.length; i++) {
            int index1 = 0;
            int index2 = 1;
            for (int j = 1; j <= len; j++) {
                int a = 0;
                int b = 0;
        if (index1< chars.length&&index2< chars.length){
                if ((checkRange(chars[index1],'a','z')||checkRange(chars[index1],'A','Z'))&&
                        (checkRange(chars[index2],'a','z')||checkRange(chars[index2],'A','Z'))){
                    a = chars[index1]>'Z'?chars[index1]+0:chars[index1]+32;
                    b = chars[index2]>'Z'?chars[index2]+0:chars[index2]+32;

                    if (a>b){
                        swap(chars,index1,index2);
                    }
                    index1++;
                    index2++;
                }else if (!(checkRange(chars[index1],'a','z')&&!checkRange(chars[index1],'A','Z'))&&
                        (checkRange(chars[index2],'a','z')||checkRange(chars[index2],'A','Z'))){
                    index1++;
                    if (index1==index2){
                        index2++;
                    }
//                    System.out.println(chars[index1]+" "+chars[index2]);
                }else if (!(checkRange(chars[index2],'a','z')&&!checkRange(chars[index2],'A','Z'))&&
                        (checkRange(chars[index1],'a','z')||checkRange(chars[index1],'A','Z'))){
                    index2++;
                }else {
                    index1++;
                    index2++;
                }
            }

            }
//            for (char aChar : chars) {
//                System.out.print(aChar);
//            }
//            System.out.println();
        }

        for (char aChar : chars) {
            System.out.print(aChar);
        }

    }


    // 区间核对
    static boolean checkRange(char a,char b,char c){
        if (a<b||a>c){
            return false;
        }else {
            return true;
        }
    }


    static void swap(char[] chars,int a,int b){
        char tempChar = chars[a];
        chars[a] = chars[b];
        chars[b] = tempChar;
    }
}
